home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / PIL / ImageStat.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  4KB  |  150 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import Image
  5. import operator
  6. import math
  7.  
  8. class Stat:
  9.     
  10.     def __init__(self, image_or_list, mask = None):
  11.         
  12.         try:
  13.             if mask:
  14.                 self.h = image_or_list.histogram(mask)
  15.             else:
  16.                 self.h = image_or_list.histogram()
  17.         except AttributeError:
  18.             self.h = image_or_list
  19.  
  20.         if type(self.h) != type([]):
  21.             raise TypeError, 'first argument must be image or list'
  22.         
  23.         self.bands = range(len(self.h) / 256)
  24.  
  25.     
  26.     def __getattr__(self, id):
  27.         if id[:4] == '_get':
  28.             raise AttributeError, id
  29.         
  30.         v = getattr(self, '_get' + id)()
  31.         setattr(self, id, v)
  32.         return v
  33.  
  34.     
  35.     def _getextrema(self):
  36.         
  37.         def minmax(histogram):
  38.             n = 255
  39.             x = 0
  40.             for i in range(256):
  41.                 if histogram[i]:
  42.                     n = min(n, i)
  43.                     x = max(x, i)
  44.                     continue
  45.             
  46.             return (n, x)
  47.  
  48.         v = []
  49.         for i in range(0, len(self.h), 256):
  50.             v.append(minmax(self.h[i:]))
  51.         
  52.         return v
  53.  
  54.     
  55.     def _getcount(self):
  56.         v = []
  57.         for i in range(0, len(self.h), 256):
  58.             v.append(reduce(operator.add, self.h[i:i + 256]))
  59.         
  60.         return v
  61.  
  62.     
  63.     def _getsum(self):
  64.         v = []
  65.         for i in range(0, len(self.h), 256):
  66.             sum = 0
  67.             for j in range(256):
  68.                 sum = sum + j * self.h[i + j]
  69.             
  70.             v.append(sum)
  71.         
  72.         return v
  73.  
  74.     
  75.     def _getsum2(self):
  76.         v = []
  77.         for i in range(0, len(self.h), 256):
  78.             sum2 = 0
  79.             for j in range(256):
  80.                 sum2 = sum2 + j ** 2 * float(self.h[i + j])
  81.             
  82.             v.append(sum2)
  83.         
  84.         return v
  85.  
  86.     
  87.     def _getmean(self):
  88.         v = []
  89.         for i in self.bands:
  90.             v.append(self.sum[i] / self.count[i])
  91.         
  92.         return v
  93.  
  94.     
  95.     def _getmedian(self):
  96.         v = []
  97.         for i in self.bands:
  98.             s = 0
  99.             l = self.count[i] / 2
  100.             b = i * 256
  101.             for j in range(256):
  102.                 s = s + self.h[b + j]
  103.                 if s > l:
  104.                     break
  105.                     continue
  106.             
  107.             v.append(j)
  108.         
  109.         return v
  110.  
  111.     
  112.     def _getrms(self):
  113.         v = []
  114.         for i in self.bands:
  115.             v.append(math.sqrt(self.sum2[i] / self.count[i]))
  116.         
  117.         return v
  118.  
  119.     
  120.     def _getvar(self):
  121.         v = []
  122.         for i in self.bands:
  123.             n = self.count[i]
  124.             v.append((self.sum2[i] - self.sum[i] ** 2 / n) / n)
  125.         
  126.         return v
  127.  
  128.     
  129.     def _getstddev(self):
  130.         v = []
  131.         for i in self.bands:
  132.             v.append(math.sqrt(self.var[i]))
  133.         
  134.         return v
  135.  
  136.  
  137. Global = Stat
  138. if __name__ == '__main__':
  139.     im = Image.open('Images/lena.ppm')
  140.     st = Stat(im)
  141.     print 'extrema', st.extrema
  142.     print 'sum    ', st.sum
  143.     print 'mean   ', st.mean
  144.     print 'median ', st.median
  145.     print 'rms    ', st.rms
  146.     print 'sum2   ', st.sum2
  147.     print 'var    ', st.var
  148.     print 'stddev ', st.stddev
  149.  
  150.